博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaWeb学习-案例练习-图书管理-13-添加购物车的实现过程
阅读量:4302 次
发布时间:2019-05-27

本文共 4418 字,大约阅读时间需要 14 分钟。

这篇来做一个练习,就是图书详情页面,点击购买按钮,这本书添加到购物中。购物车中主要思想就是采用HashMap来存储数据。

 

1.需求场景

浏览器打开

显示图书列表,例如点击第一本进入该书的详情页。

点击购买,这本书被添加到购物中。

 

2.大致实现思路

这里来想一下大致实现的思路,就是product_info.jsp页面点击购买按钮,这个跳转到一个addCartServlet中,把book.id传过来,然后根据id去查询这本书,然后放入购物车页面,大致就是这么一个过程。

 

3.给购买按钮添加链接跳转

这里跳转到一个addCartServlet,关键是id需要传过来,找到product_info.jsp,找到添加这个元素位置,代码变动如下(红圈位置是代码变动)。

 

具体代码如下

 

4.创建AddCartServlet.java

这里先创建一个空的servlet文件

5.Dao/Service层代码

看看Dao层代码,由于这里我们根据id来查找图书,这个方法我们之前写过了,所以本次练习不需要更改Dao和Service层代码。

 

6.Servlet文件代码

package com.anthony.web.servlet;import java.io.IOException;import java.util.HashMap;import java.util.Map;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import com.anthony.domain.Book;import com.anthony.service.BookService;import com.anthony.service.BookServiceImpl;public class AddCartServlet extends HttpServlet {	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {				String id = request.getParameter("id");		//根据id去查找book		BookService bs = new BookServiceImpl();		Book book = bs.findBookById(id);				//从session中购物车取出来		HttpSession session = request.getSession();		Map
cart = (Map
) session.getAttribute("cart"); int num = 1; if(cart == null) { cart = new HashMap
(); } // 如果购物车中包含这本书,num就要加1 if(cart.containsKey(book)) { num = Integer.parseInt(cart.get(book)) + 1; } // 把图书放入购物车 cart.put(book, num+""); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }}

但是上面有一个问题,在这行代码cart.containsKey(book)

Book是一个高级对象,这个引用对象比较,虽然查找出来的book 和session中的book值一样,但是地址不一样,hashmap是根据hashcode去比较,这里我们来Book.java类重写下hashCode和equal方法。

@Override	public int hashCode() {		final int prime = 31;		int result = 1;		result = prime * result + ((id == null) ? 0 : id.hashCode());		return result;	}	@Override	public boolean equals(Object obj) {		if (this == obj)			return true;		if (obj == null)			return false;		if (getClass() != obj.getClass())			return false;		Book other = (Book) obj;		if (id == null) {			if (other.id != null)				return false;		} else if (!id.equals(other.id))			return false;		return true;	}

继续写Servlet代码,添加一个打印内容,可以点击继续购物或者点击查看购物车

package com.anthony.web.servlet;import java.io.IOException;import java.io.PrintWriter;import java.util.HashMap;import java.util.Map;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import com.anthony.domain.Book;import com.anthony.service.BookService;import com.anthony.service.BookServiceImpl;public class AddCartServlet extends HttpServlet {	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {				response.setContentType("text/html;charset=UTF-8");		PrintWriter out = response.getWriter();		String id = request.getParameter("id");		//根据id去查找book		BookService bs = new BookServiceImpl();		Book book = bs.findBookById(id);				//从session中购物车取出来		HttpSession session = request.getSession();		Map
cart = (Map
) session.getAttribute("cart"); int num = 1; if(cart == null) { cart = new HashMap
(); } // 如果购物车中包含这本书,num就要加1 if(cart.containsKey(book)) { num = Integer.parseInt(cart.get(book)) + 1; } // 把图书放入购物车 cart.put(book, num+""); // 把cart对象放回session作用域中 session.setAttribute("cart", cart); out.print("
继续购物
查看购物车"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }}

上面就添加了字符集设置和最后一行out输出,里面链接跳转。

下面来在cart.jsp页面中写一个循环,因为购物车列表存在多条数据的情况,下面代码主要看49-73行

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>电子书城
首页    >    购物车
序号 商品名称 价格        数量 库存 小计 取消
${vs.count} ${entry.key.name } ${entry.key.price } ${entry.key.pnum} ${entry.key.price*entry.value} X
合计:  ${total}元
    

保存代码,接下来进行部署测试

 

7.部署测试

保存代码,部署重启Tomcat服务器,然后来点击购买和查看购物车操作。

点击购买之后,跳转页面输出如下内容。

这里点击继续购物,再买一本。然后点击查看购物车。

 

转载地址:http://knows.baihongyu.com/

你可能感兴趣的文章
JPA多条件动态查询
查看>>
JPA自定义sql
查看>>
BigDecimal正确使用了吗?
查看>>
joplin笔记
查看>>
JNDI+springmvc使用
查看>>
vue+springboot分页交互
查看>>
vue+springboot打包发布
查看>>
XSL 开发总结
查看>>
beta阶段第六次scrum meeting
查看>>
SpringBoot+MybatisPlus实现批量添加的两种方式
查看>>
vue 设计结构
查看>>
Sqlerver2005+按照ID分组取前几条
查看>>
Python的编码和解码
查看>>
docker
查看>>
停车场系统安全岛设计施工要求
查看>>
Docker实战
查看>>
asp.net core结合Gitlab-CI实现自动化部署
查看>>
RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.7 版本发布
查看>>
EasyNVR H5无插件摄像机直播解决方案前端解析之:关于直播页面和视频列表页面切换的问题...
查看>>
django搭建一个小型的服务器运维网站-拿来即用的bootstrap模板
查看>>